Jump to content
  • 0

div > table


raznodel
 Share

Question

 <div><table></table></div> 

Вот такая простая структура, но при сжатии страницы, таблица сжимается до минимальной ширины, а див продолжает сжиматься дальше, выглядит некрасиво - див имеет бакгроунд и он сжимается и становиться меньше таблицы. Замечено в браузерах: FF, IE8, Crome, Opera.

Кто сталкивался с подобной проблемой, как решали?

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0

Проблематично на самом деле фон сложный из 2х картинок, юзается 2 дива, и перекинуть его на таблицу не крайний вариант. Заставить див не сжиматься меньше таблицы есть возможность?

Link to comment
Share on other sites

  • 0

Проблематично на самом деле фон сложный из 2х картинок, юзается 2 дива, и перекинуть его на таблицу не крайний вариант. Заставить див не сжиматься меньше таблицы есть возможность?

float: left?

Link to comment
Share on other sites

  • 0

Проблематично на самом деле фон сложный из 2х картинок, юзается 2 дива, и перекинуть его на таблицу не крайний вариант. Заставить див не сжиматься меньше таблицы есть возможность?

float: left?

div {float: left;} или div {display: inline-block;} или div {display: table;} или динамически пересчитывать ширину таблицы и присваивать её диву.

Link to comment
Share on other sites

  • 0

остается только флоа float:left; display в IE7 косячить будет. но черт, див теперь не тянется на 100%. width:100% не катит т.к. есть padding и margin есть способ ещё как то растянуть?

вложи еще один див и ему уже задай float: left и width: 100%

Link to comment
Share on other sites

  • 0

Оксан, а вот смотри, такая тема не пашет в Хроме например. Что я делаю не так?

http://jsfiddle.net/y7vRX/

Ну да, точно :facepalmxd: width: 100% не подходит, тогда див растянется только на ширину окна.

Так должно работать http://jsfiddle.net/y7vRX/1/

Upd. Или, наверное, даже лучше так http://jsfiddle.net/y7vRX/3/

Edited by sigma77
Link to comment
Share on other sites

  • 0

Оксан, а вот смотри, такая тема не пашет в Хроме например. Что я делаю не так?

http://jsfiddle.net/y7vRX/

Ну да, точно :facepalmxd: width: 100% не подходит, тогда див растянется только на ширину окна.

Так должно работать http://jsfiddle.net/y7vRX/1/

Upd. Или, наверное, даже лучше так http://jsfiddle.net/y7vRX/3/

Спасибо Оксан, а ты могла бы объяснить, как работает этот приём?

Upd. Или, наверное, даже лучше так http://jsfiddle.net/y7vRX/3/

Чем лучше?

Link to comment
Share on other sites

  • 0

Спасибо Оксан, а ты могла бы объяснить, как работает этот приём?

Тут дело в том как работает width: auto у плавающих элементов. У обычных блоков в потоке значение auto, если не заданы марджины и паддинги равно ширине родительского блока (грубо говоря 100%). У плавающего блока эта ширина будет равна ширине дочернего элемента. Если плавающему блоку задать ширину 100%, то он примет родительскую ширину, а она будет равна ширине окна браузера. Поэтому мы задаем min-width: 100%, чтобы он всегда занимал всю доступную ширину, и оставляем значение width: auto, чтобы если таблица будет шире, блок растянулся на её шинину.

Upd. Или, наверное, даже лучше так http://jsfiddle.net/y7vRX/3/

Чем лучше?

Не пропадает горизонтальный скролл при уменьшении размеров экрана.

Но вообще надо подумать, может еще есть оптимальней вариант. Тут уже сам макет смотреть надо.

Может там и таблицы нафиг не нужны :)

Link to comment
Share on other sites

  • 0

Тут дело в том как работает width: auto у плавающих элементов. У обычных блоков в потоке значение auto, если не заданы марджины и паддинги равно ширине родительского блока (грубо говоря 100%). У плавающего блока эта ширина будет равна ширине дочернего элемента. Если плавающему блоку задать ширину 100%, то он примет родительскую ширину, а она будет равна ширине окна браузера. Поэтому мы задаем min-width: 100%, чтобы он всегда занимал всю доступную ширину, и оставляем значение width: auto, чтобы если таблица будет шире, блок растянулся на её шинину.

Ага, но смотри, ведь вот в этой ситуации откуда например .wrap знает ширину окна, если он растягивается на ширину родителя .outer, у которого ширина подгоняется под размер содержимого, а т.е. .wrap?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
* { margin: 0; padding: 0;}
body { width: 100%; border: 1px solid #000; height: 500px;}
table {

width: 100%;
border-collapse: collapse;
border-spacing: 0;
}
.outer { float: left; padding: 20px; background: orange}
.wrap { float: left; background:red; min-width: 100%}
</style>
</head>

<body>
<div class="outer">
<div class="wrap">
<table><tr><td> ksdjfksdjf sdkfjsd kdjf sdfjks ksj skfdjsksd jfkdsj sdkfskdlfj sdfkjsdfj dfjk sdfkj dsfkjdkf jskdjf sakjf ksdjfksdjfksdjf</td><td> ksdjfksdjf sdkfjsd kdjf sdfjks ksj skfdjsksd jfkdsj sdkfskdlfj sdfkjsdfj dfjk sdfkj dsfkjdkf jskdjf sakjf ksdjfksdjfksdjf</td><td> ksdjfksdjf sdkfjsd kdjf sdfjks ksj skfdjsksd jfkdsj sdkfskdlfj sdfkjsdfj dfjk sdfkj dsfkjdkf jskdjf sakjf ksdjfksdjfksdjf</td><td> ksdjfksdjf sdkfjsd kdjf sdfjks ksj skfdjsksd jfkdsj sdkfskdlfj sdfkjsdfj dfjk sdfkj dsfkjdkf jskdjf sakjf ksdjfksdjfksdjf</td><td> ksdjfksdjf sdkfjsd kdjf sdfjks ksj skfdjsksd jfkdsj sdkfskdlfj sdfkjsdfj dfjk sdfkj dsfkjdkf jskdjf sakjf ksdjfksdjfksdjf</td></tr></table>
</div>
</div>

</body>
</html>

Не пропадает горизонтальный скролл при уменьшении размеров экрана.

Но вообще надо подумать, может еще есть оптимальней вариант. Тут уже сам макет смотреть надо.

Может там и таблицы нафиг не нужны :)

Хм...вроде одно и тоже :unsure:

Link to comment
Share on other sites

  • 0

Ага, но смотри, ведь вот в этой ситуации откуда например .wrap знает ширину окна, если он растягивается на ширину родителя .outer, у которого ширина подгоняется под размер содержимого, а т.е. .wrap?

Ну а ты попробуй уменьшить количество контента http://jsfiddle.net/3zzqz/

Хм...вроде одно и тоже :unsure:

Ты точно сравниваешь http://jsfiddle.net/y7vRX/1/ и http://jsfiddle.net/y7vRX/3/

Попробуй добавить контента и поуменьшать страницу.

Link to comment
Share on other sites

  • 0

Ага, но смотри, ведь вот в этой ситуации откуда например .wrap знает ширину окна, если он растягивается на ширину родителя .outer, у которого ширина подгоняется под размер содержимого, а т.е. .wrap?

Ну а ты попробуй уменьшить количество контента http://jsfiddle.net/3zzqz/

Аа, т.е. выходит, что .wrap просто всегда растягивается на ширину своего контента, а .outer на ширину .wrap?

.outer { float: left;  padding: 20px; background: orange}
.wrap { float: left; background:red; min-width: 100%}

Upd. Тут ошибся, поэтому эту часть поста удалил.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy